package com.hospital.diagnosis.module.utils;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import java.util.concurrent.TimeUnit;

import static com.hospital.common.base.interfaces.Const.WEB_SOCKET_SESSION_PREFIX;

/**
 * ws会话管理器
 * @author yhn
 * @version 1.0
 */
@Component
public class WebSocketSessionManager {
    @Value("${websocket.session-expire-time}")
    private Long sessionExpireTime;
    @Autowired
    private RedisUtils redisUtils;

    /**
     * 会话注册
     * @param sessionId 会话信息
     * @param userId 用户id
     */
    public void register(String sessionId, Long userId){
        redisUtils.set(WEB_SOCKET_SESSION_PREFIX+sessionId,userId,sessionExpireTime, TimeUnit.MINUTES);
    }

    /**
     * 检测会话是否过期
     * @param sessionId 会话信息
     */
    public Boolean expire(String sessionId){
        // 检查会话是否存在
        if (!redisUtils.hasKey(WEB_SOCKET_SESSION_PREFIX + sessionId)) {
            return false;
        }
        // 检查会话是否过期
        long ttl = redisUtils.getExpire(WEB_SOCKET_SESSION_PREFIX + sessionId, TimeUnit.MINUTES);
        return ttl < 0;
    }

    /**
     * 移除会话
     * @param sessionId 会话信息
     */
    public void removeSession(String sessionId){
        redisUtils.del(WEB_SOCKET_SESSION_PREFIX + sessionId);
    }

    /**
     * 获取会话患者id
     * @param sessionId 会话信息
     */
    public Long getPatientId(String sessionId){
        return (Long) redisUtils.get(WEB_SOCKET_SESSION_PREFIX + sessionId);
    }
}
